QD 45 - CopyBitsÇégópǵǃÉXÉNÉäÅ[ÉìÇÉLÉÉÉvÉ`ÉÉÇ∑ÇÈÇΔÇ´Ç…ÉJÅ[É\ÉãÇä‹ÇflÇÈï˚ñ@

Åi27-September-96Åj

Q: ÉXÉNÉäÅ[ÉìÇÉLÉÉÉvÉ`ÉÉǵÇÊǧÇΔǵǃCopyBitsÇégópǵǃǢÇÈÇÃÇ≈Ç∑Ç™ÅAÉ}ÉEÉXÉJÅ[É\ÉãÇ™ÉLÉÉÉvÉ`ÉÉÇ≥ÇÍÇ‹ÇπÇÒÅBâΩÇ™å¥àˆÇ»ÇÃÇ≈ǵÇÂǧǩÅH

A: CopyBitsÇÕÅAé¿ç€ÇÃçÏãΔÇénÇflÇÈëOÇ…ShieldCursorÇÉRÅ[ÉãǵǃÉJÅ[É\ÉãÇâBǵǃǵNjǢNjÇ∑ÅBÉLÉÉÉvÉ`ÉÉǵÇΩÉrÉbÉgÉ}ÉbÉvÇ…ÉJÅ[É\ÉãÇ™ä‹Ç‹ÇÍǃǢǻǢÇÃÇÕÅADZÇÍÇ™å¥àˆÇ≈Ç∑ÅBà»â∫ÇÃÉRÅ[ÉhÇÕÅAÉJÅ[É\ÉãÇâBǵÅAÉçÅ[ÉÅÉÇÉäÅEÉOÉçÅ[ÉoÉãíÜÇ…ÉXÉgÉAÇ≥ÇÍǃǢÇÈÉJÅ[É\ÉãÇÃÉJÉEÉìÉgÇå∏è≠Ç≥ÇπÇÈDZÇΔÇ…ÇÊÇËÅAShieldCursorÇÉRÅ[ÉãǵǻǢÇÊǧDžCopyBitsÇÃó†ÇǩǴNjÇ∑ÅBÉçÅ[ÉÅÉÇÉäÅEÉOÉçÅ[ÉoÉãÇégópÇ∑ÇÈDZÇΔÇÕäÎåØÇ≈džÇËÅAè´óàÇÃOSÇ≈ïœçXÇÃëŒè€ÇΔÇ»ÇËǧÇÈDZÇΔÇ…íçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅBǻDžÇÕÇΔLJdžÇÍÅAOSÇÃÉXÉNÉäÅ[ÉìÉ_ÉìÉvÇÕìØÇ∂ÇÊǧDžìÆçÏǵNjÇ∑ÅB

unsigned char oldCrsrVis;
short oldCrsrState;

//
// ÉJÅ[É\ÉãÇâBÇ∑
//
oldCrsrVis = GetCrsrVis();
oldCrsrState = GetCrsrState();
SetCrsrVis((unsigned char) 0);
SetCrsrState(oldCrsrState - 1);

CopyBits(.....);

//
// ÉJÅ[É\ÉãÇÉäÉXÉgÉAÇ∑ÇÈ
//
SetCrsrState(oldCrsrState);
SetCrsrVis(oldCrsrVis);
ä÷êîÇÃíËã`ÇÕà»â∫ÇÃí ÇËÇ≈Ç∑ÅB
enum {
    CrsrRect = 0x83C,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ™ÉqÉbÉgǵǃǢÇÈÉåÉNÉg [8 bytes]*/
    		
    TheCrsr  = 0x844,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇÃÉfÅ[É^ÅAÉ}ÉXÉNÇ®ÇÊÇ—ÉzÉbÉgÉXÉ|ÉbÉg [68 bytes]*/
    		
    CrsrAddr = 0x888,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ…âBÇ≥ÇÍǃǢÇÈïîï™ÇÃÉfÅ[É^ÇÃÉAÉhÉåÉX [long]*/
    
    CrsrSave = 0x88C,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ…âBÇ≥ÇÍǃǢÇÈïîï™ÇÃÉfÅ[É^ [64 bytes]*/
    
    CrsrVis  = 0x8CC,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ™ï\é¶Ç≥ÇÍǃǢÇÈÇ©ÅH [byte]*/
    
    CrsrBusy = 0x8CD,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ™ÉçÉbÉNÇ≥ÇÍǃǢÇÈÇ©ÅH [byte]*/
    
    CrsrNew  = 0x8CE,   /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ™ïœçXÇ≥ÇÍǃǢÇÈÇ©ÅH [byte]*/
    
    CrsrState = 0x8D0,  /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇÃÉlÉXÉgÉåÉxÉã [word]*/
    
    CrsrObscure = 0x8D2 /*[ÉOÉçÅ[ÉoÉãïœêî]
    			ÉJÅ[É\ÉãÇ™ï¢Ç¢âBÇ≥ÇÍǃǢÇÈÅiobscureÅjǩǫǧǩÇé¶Ç∑ÉZÉ}ÉtÉH [byte]*/
  };

int IsCursorHidden(void);
void SetCrsrVis(unsigned char cursorVisible);
unsigned char GetCrsrVis(void);
PicHandle DumpScreenArea(void);
void ModCrsrState(short del);
short GetCrsrState(void);
void SetCrsrState(short val);

void SetCrsrVis(unsigned char cursorVisible)
{
    *(unsigned char*)CrsrVis = cursorVisible;
}

unsigned char GetCrsrVis(void)
{
   return( *(unsigned char*)CrsrVis );
}

void ModCrsrState(short del)
{
        *(unsigned char*)CrsrState += del;
}

short GetCrsrState(void)
{
        return ( *(unsigned char*)CrsrState );
}

void SetCrsrState(short val)
{
        *(unsigned char*)CrsrState = val;
}

int IsCursorHidden()
{
    int retVal = 0;
    unsigned char cursorVisible;

    cursorVisible = *(unsigned char*)CrsrVis;
    if (cursorVisible)
        retVal = 0;
    else
        retVal = 1;
    return (retVal);
}

ÉXÉNÉäÅ[ÉìÉ_ÉìÉvÇçsǧÉTÉìÉvÉãÉRÅ[ÉhÇ™ÅAç≈êVÇÃDeveloper CDÇ…ä‹Ç‹ÇÍǃǢNjÇ∑ÅBÉpÉXÇÕà»â∫ÇÃí ÇËÇ≈Ç∑ÅB

References:
     Dev.CD Aug 96 TC
          Sample Code
               Snippets
                    QuickDraw
                         ScreenDump
                         ---> DumpScreen.c

[ Technical Q&A's : Graphics & Media : QuickDraw : QD45 ]